/**
 * ニュース一覧毎行のデータを表示用テンプレート関数を定義する
 */
jp.bbcs.rssclient.views.innerListItemTpl = function() {
	return "<div class='list_row'>" +
	   "<div class='list_title'>{title}</div>" +
	   "<div class='list_snippet'>{contentSnippet}</div>" +
	"</div>";
};

/**
 * ニュース一覧画面クラスを定義する
 * Sencha共通のExt.Panelクラスから継承する
 */
jp.bbcs.rssclient.views.NewsList = Ext.extend(Ext.TabPanel, {
	ui: 'light',
    tabBar: { scroll: 'horizontal' },
    items: [],
 	// fitのレイアウト定義
 	layout: 'fit',
 	
 	// ツールバー定義
 	dockedItems: [
 		new Ext.Toolbar({
 			ui: 'light',
 			title: 'すべてのニュース',
 			dock: 'top',
 			items: [
 				{xtype: 'spacer'},
 				new Ext.Button({
 					iconCls: 'settings',
 					iconMask: true,
 					handler: function(button, event) {
 						Ext.dispatch({
 							controller: jp.bbcs.rssclient.controllers.appController,
 							action: 'setting',
 							animation: {type: 'slide', direction: 'up'}
 						});
 					}
 				})
 			]
 		})
 	],

 	showDetail: function (list, index, element, event) {
 		
 		// タブされた行のデータを取得
 		var record = list.getRecord(element);
 		
 		// 詳細画面を表示（コントローラにてdispatch）
 		Ext.dispatch({
 			controller: jp.bbcs.rssclient.controllers.appController,
 			action: 'detail',
 			data: record.data,
 			animation: {type: 'slide', direction: 'left'}
 		});
 	},
    
 	generateTabItems: function(isReload) {
		// 親クラスの初期化処理を行う
 		var items = [];
    	items[items.length] = {
    		title: 'すべて',
    		layout: 'fit',
    		items: [{
    			xtype: 'list',
    			store: new Ext.data.JsonStore({
    				
    				// データソースのモデル
    			    model: 'jp.bbcs.rssclient.models.News',
    			    storeId: 'newsStore'
    			    // データソースのプロキシー定義し、google feed APIによるリモートのデータを取得
    			}),
    			itemTpl: jp.bbcs.rssclient.views.innerListItemTpl(),
    			listeners: {
					
					// タブされた場合の処理関数を設定
					itemtap: this.showDetail
    			}
    		}]
    	};
    	
		var feedStore = Ext.getStore('feedStore');
		this.proxies = [];
		var count = feedStore.getCount();
		for(var i=0; i < count; i++) {

			var group = feedStore.getAt(i).data;
			for(var j =0; j < group.feeds.length; j++) {
				var feed = group.feeds[j];
				if(feed.subscribed) {
					
					items[items.length] = {
							title: feed.title,
							layout: 'fit',
							items: [{
								xtype: 'list',
								store: new Ext.data.JsonStore({
								    // store configs
							    	autoLoad: true,
								    proxy: {
								        type: 'ajax',
								        url: 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=' + feed.url,
								        reader: {
								            type: 'json',
								            root: 'responseData.feed.entries'
								        }
								    },
								    model: 'jp.bbcs.rssclient.models.News',
								    listeners: {
										load: function() {
											var newsStore = Ext.getStore("newsStore");
											for(var i=0; i<this.data.length; i++) {
												newsStore.add(this.getAt(i));
											}
											newsStore.sort('publishedDate', 'DESC');
										}
									}
								}),
								listeners: {
									
									// タブされた場合の処理関数を設定
									itemtap: this.showDetail
								},
								itemTpl: jp.bbcs.rssclient.views.innerListItemTpl()
							}]
					};
				}
			}
		}
 		
		if(isReload) {
			this.removeAll();
			for(var i=0; i < items.length; i++) {
				this.add(items[i]);
			}
			if(items.length > 0) {
				this.setActiveItem(0);				
			}
		}
		return items;
 	},
 	
    initComponent: function() {
		// 親クラスの初期化処理を行う
 
    	this.items = this.generateTabItems();
    	jp.bbcs.rssclient.views.NewsList.superclass.initComponent.apply(this, arguments);
    }
});


